package com.meilai.project.service.business.media.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.meilai.project.dto.media.ListMediaSpecDTO;
import com.meilai.project.entity.media.MediaTypeSpec;
import com.meilai.project.entity.media.MediaTypeSpecExt;
import com.meilai.project.mapper.business.media.MediaTypeSpecMapper;
import com.meilai.project.service.business.media.MediaTypeService;
import com.meilai.project.service.business.media.MediaTypeSpecService;
import com.meilai.project.vo.business.media.MediaTypeSpecVO;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 点位类型规格 服务实现类
 * </p>
 *
 * @author xchen
 * @since 2022-05-24ß
 */
@Service
public class MediaTypeSpecServiceImpl extends ServiceImpl<MediaTypeSpecMapper, MediaTypeSpec> implements MediaTypeSpecService {

    @Autowired
    private MediaTypeService mediaTypeService;

    @Override
    public Page<MediaTypeSpecExt> listByCondition(ListMediaSpecDTO req) {
        Page<MediaTypeSpecExt> page = req.createPage(MediaTypeSpecExt.class);
        List<MediaTypeSpecExt> mediaTypeSpecExts = baseMapper.listByCondition(page, req.getMediaTypeId(), req.getName());
        page.setRecords(mediaTypeSpecExts);
        return page;
    }

    @Override
    public List<MediaTypeSpecExt> listByMediaTypeId(Long mediaTypeId) {
        return baseMapper.listByMediaTypeId(mediaTypeId);
    }

    @Override
    public List<String> listTypeSpecByMediaTypeId(Long mediaTypeId) {
        if (11 == mediaTypeId) {
            return baseMapper.listDaPingSpec();
        } else {
            return baseMapper.listMediaTypeSpec(mediaTypeId).stream().filter(StringUtils::isNotEmpty).collect(Collectors.toList());
        }
    }

//    @Override
//    public List<MediaTypeSelectVO> getAllMediaTypeSpecList() {
//        List<MediaType> list = mediaTypeService.list();
//        List<MediaTypeSpec> mediaTypeSpecList = this.list(Wrappers.<MediaTypeSpec>lambdaQuery().isNull(MediaTypeSpec::getDeleted_at));
//        List<MediaTypeSelectVO> voList = list.stream().map(item -> {
//            MediaTypeSelectVO vo = new MediaTypeSelectVO();
//            BeanUtils.copyProperties(item, vo);
//            return vo;
//        }).collect(Collectors.toList());
//        Map<Integer, List<MediaTypeSpec>> map = mediaTypeSpecList.stream().collect(Collectors.groupingBy(MediaTypeSpec::getMedia_type_id));
//        voList.forEach(item -> {
//            //  获取次类型下面的规则配置
//            List<MediaTypeSpec> tmpList = map.get(item.getId().intValue());
//            // 如果此媒体类型具有内外规则区分的情况下
//            if (item.getHas_distinguish_spec()) {
//                // 禁用添加默认配置
//                item.setAdd_default_spec_status(1);
//                // 具备可配置多个规格情况下
//                if (tmpList == null || tmpList.size() == 0 || item.getHas_multiple_spec()) {
//                    // 可开启添加对内对外配置
//                    item.setAdd_external_spec_status(0);
//                    item.setAdd_inside_spec_status(0);
//                } else {
//                    // 获取两个规则数量
//                    List<MediaTypeSpec> insideSpecList = tmpList.stream().filter(tmp -> tmp.getType().equals(1)).collect(Collectors.toList());
//                    List<MediaTypeSpec> externalSpecList = tmpList.stream().filter(tmp -> tmp.getType().equals(2)).collect(Collectors.toList());
//                    item.setAdd_inside_spec_status((insideSpecList != null && insideSpecList.size() > 0) ? 1 : 0);
//                    item.setAdd_external_spec_status((externalSpecList != null && externalSpecList.size() > 0) ? 1 : 0);
//                }
//            } else {
//                // 禁用添加对内对外配置
//                item.setAdd_external_spec_status(1);
//                item.setAdd_inside_spec_status(1);
//                // 具备可配置多个规格情况下
//                if (tmpList == null || tmpList.size() == 0 || item.getHas_multiple_spec()) {
//                    // 可开启添加默认配置
//                    item.setAdd_default_spec_status(0);
//                } else {
//                    // 获取默认规格数量
//                    List<MediaTypeSpec> defaultSpecList = tmpList.stream().filter(tmp -> tmp.getType().equals(0)).collect(Collectors.toList());
//                    item.setAdd_default_spec_status((defaultSpecList != null && defaultSpecList.size() > 0) ? 1 : 0);
//                }
//            }
//        });
//        return voList;
//    }


    @Override
    public List<MediaTypeSpecVO> allList() {
        return baseMapper.allList();
    }
}
